//路由鉴权：鉴权，当项目中路由能不能被的权限的设置（某一路径什么条件下可以访问，什么条件下不可以访问）
import router from "./router";

import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'
//引入pinia大仓库
import pinia from "./store";
//引入仓库，获取token(在组件外部引入小仓库的前提是必须有大仓库)
import useUserStore from "./store/modules/user";

//引入setting组件
import setting from "./setting";


//取消进度条加载转圈动画
nprogress.configure({ showSpinner: false });

//全局守卫：项目当中任意路由都会触发的钩子
//全局前置守卫
router.beforeEach(async (to, _form, next) => {
    let userstore = useUserStore(pinia);
    //修改路由切换标题
    document.title = `${setting.title}-${to.meta.title}`
    //to：你将要访问的那个路径
    //from：你从那个路由而来
    //next：路由放行函数
    //访问某一个路由之前的守卫
    nprogress.start();
    //获取用户是否登录
    let token = userstore.token;
    //获取用户名字
    let username = userstore.username
    if (token) {
        //用户登录成功判断
        if (to.path == '/login') {
            next({ path: '/' })
        } else {
            //如果有用户信息，则放行
            //如果没有用户信息，则获取用户信息，再放行
            if (username) {
                next()
            } else {
                //发请求获取用户信息
                try {
                    //获取用户信息
                    await userstore.userInfo();
                    next({...to,replace:true});
                } catch (error) {
                    //token过期
                    //退出登录
                    await userstore.userLogout();
                    next({ path: '/login', query: { redirect: to.path } })
                }
            }

        }
    } else {
        //用户未登录判断
        if (to.path == '/login') {
            next();
        } else {
            next({ path: "/login", query: { redirect: to.path } })
        }
    }
})

//全局后置首位
router.afterEach((_to, _form, _next) => {
    nprogress.done();
})

//问题一:任意路由切换实现进度条业务  --nprogress(插件)
//问题二：路由鉴权（路由组件访问权限设置）
//全局路由组件：登录|404|任意路由|首页|数据大屏|权限管理（三个子路由）|商品管理（四个子路由）


//用户未登录：可以访问login,其余不能访问（指向login）
//用户登录成功，不可以访问login(指向首页)，其余可以访问
//判断状态：token